// tv.cpp -- methods for the Tv class (Remote methods are inline)
//#include <iostream>
//#include "test_0307.h"
//
//bool Tv::volup()
//{
//	if (volume < MaxVal)
//	{
//		volume++;
//		return true;
//	}
//	else
//	{
//		return false;
//	}
//}
//
//bool Tv::voldown()
//{
//	if (volume > MinVal)
//	{
//		volume--;
//		return true;
//	}
//	else
//	{
//		return false;
//	}
//}
//
//void Tv::chanup()
//{
//	if (channel < maxchannel)
//	{
//		channel++;
//	}
//	else
//	{
//		channel = 1;
//	}
//}
//
//void Tv::chandown()
//{
//	if (channel > 1)
//	{
//		channel--;
//	}
//	else
//	{
//		channel = maxchannel;
//	}
//}
//
//void Tv::settings() const
//{
//	using std::cout;
//	using std::endl;
//	cout << "Tv is " << (state == Off ? "Off" : "On") << endl;
//	if (state == On)
//	{
//		cout << "Volume setting = " << volume << endl;
//		cout << "Channel setting = " << channel << endl;
//		cout << "Mode = "
//			<< (mode == Antenna ? "antenna" : "cable") << endl;
//		cout << "Input = "
//			<< (input == TV ? "TV" : "DVD") << endl;
//	}
//}
//
//// use_tv.cpp -- using the Tv and Remote classes
//int main()
//{
//	using std::cout;
//	Tv s42;
//	cout << "Initial settings for 42\" TV:\n";
//	s42.settings();
//	s42.onoff();
//	s42.chanup();
//	cout << "\nAdjusted settings for 42\" TV:\n";
//	s42.settings();
//
//	Remote grey;
//
//	grey.set_chan(s42, 10);
//	grey.volup(s42);
//	grey.volup(s42);
//	cout << "\n42\" settings after using remote:\n";
//	s42.settings();
//
//	Tv s58(Tv::On);
//	s58.set_mode();
//	grey.set_chan(s58, 28);
//	cout << "\n58\" setings:\n";
//	s58.settings();
//
//	return 0;
//}

// nested.cpp -- using a queue that has a nested class
//#include <iostream>
//
//#include <string>
//#include "test_0307.h"
//
//int main()
//{
//	using std::string;
//	using std::cin;
//	using std::cout;
//
//	QueueTP<string> cs(5);
//	string temp;
//
//	while (!cs.isfull())
//	{
//		cout << "Please enter your name. You will be "
//			"served in the order of arrival.\n"
//			"name: ";
//		getline(cin, temp);
//		cs.enqueue(temp);
//	}
//	cout << "The queue is full. Processing begins!\n";
//
//	while (!cs.isempty())
//	{
//		cs.dequeue(temp);
//		cout << "Now processing " << temp << "...\n";
//	}
//
//	return 0;
//}

// error1.cpp -- using the abort() function
//#include <iostream>
//#include <cstdlib>
//double hmean(double a, double b);
//
//int main()
//{
//	double x, y, z;
//
//	std::cout << "Enter two number: ";
//	while (std::cin >> x >> y)
//	{
//		z = hmean(x, y);
//		std::cout << "Harmonic mean of " << x << " and " << y
//			<< " is " << z << std::endl;
//		std::cout << "Enter next set to numbers <q to quit>: ";
//	}
//	std::cout << "Bye!\n";
//	return 0;
//}
//
//double hmean(double a, double b)
//{
//	if (a == -b)
//	{
//		std::cout << "untenable arguments to hmeaa()\n";
//		std::abort();
//	}
//	return 2.0 * a * b / (a + b);
//}

// error2.cpp -- returning an error code
//#include <iostream>
//#include <cfloat>	// (or float.h) for DBL_MAX
//
//bool hmean(double a, double b, double* ans);
//
//int main()
//{
//	double x, y, z;
//
//	std::cout << "Enter two numbers: ";
//	while (std::cin >> x >> y)
//	{
//		if (hmean(x, y, &z))
//		{
//			std::cout << "Harmonic mean of " << x << " and " << y
//				<< " is " << z << std::endl;
//		}
//		else
//		{
//			std::cout << "One value should not be the negative "
//				<< "of the other - try again.\n";
//		}
//		std::cout << "Enter next set of numbers <q to quit>: ";
//	}
//	std::cout << "Bye!\n";
//	return 0;
//}
//
//bool hmean(double a, double b, double* ans)
//{
//	if (a == -b)
//	{
//		*ans = DBL_MAX;
//		return false;
//	}
//	else
//	{
//		*ans = 2.0 * a * b / (a + b);
//		return true;
//	}
//}

// error4.cpp - using exception classes
//#include <iostream>
//#include <cmath>	// or math.h, unix users mey need -1m flag
//#include "test_0320.h"
//
//// function prototypes
//double hmean(double a, double b);
//double gmean(double a, double b);
//
//int main()
//{
//	using std::cout;
//	using std::cin;
//	using std::endl;
//
//	double x, y, z;
//
//	cout << "Enter two numbers: ";
//	while (cin >> x >>y)
//	{
//		try
//		{
//			z = hmean(x, y);
//			cout << "Harmonic mean of " << x << " and " << y
//				<< " is " << z << endl;
//			cout << "Geometric mean of " << x << " and " << y
//				<< " is " << gmean(x, y) << endl;
//			cout << "Enter next set of numbers <q to quit>: ";
//		}
//		catch (bad_hmean& bg)
//		{
//			bg.mesg();
//			cout << "Try again.\n";
//			continue;
//		}
//		catch (bad_gmean& hg)
//		{
//			cout << hg.mesg();
//			cout << "Values used: " << hg.v1 << ", "
//				<< hg.v2 << endl;
//			cout << "Sorry, you don't get to play any more.\n";
//			break;
//		}
//	}
//	cout << "Bye!\n";
//	return 0;
//}
//
//double hmean(double a, double b)
//{
//	if (a == -b)
//	{
//		throw bad_hmean(a, b);
//	}
//	return 2.0 * a * b / (a + b);
//}
//
//double gmean(double a, double b)
//{
//	if (a < 0 || b <0)
//	{
//		throw bad_gmean(a, b);
//	}
//	return std::sqrt(a * b);
//}

// newexcp.cpp -- the bad_alloc exception
//#include <iostream>
//#include <new>
//#include <cstdlib>	// for exit(), EXIT_FAILURE
//using namespace std;
//
//struct Big
//{
//	double stuff[20000];
//};
//
//int main()
//{
//	Big* pb;
//	try
//	{
//		cout << "Trying to get a big block of memory:\n";
//		pb = new Big[1000000];	// 1600000000 bytes
//		cout << "Got past the new request:\n";
//	}
//	catch (bad_alloc& ba)
//	{
//		cout << "Caught the exception!\n";
//		cout << ba.what() << endl;
//		exit(EXIT_FAILURE);
//	}
//	cout << "Memory successfully allocated\n";
//	pb[0].stuff[0] = 4;
//	cout << pb[0].stuff[0] << endl;
//	delete[] pb;
//	return 0;
//}

// str1.cpp -- introducing the string class
//#include <iostream>
//#include <string>
//// using string constructors
//
//int main()
//{
//	using namespace std;
//	string one("Lottery Winner!");		// ctor #1
//	cout << one << endl;				// overloaded <<
//	string two(20, '$');				// ctor #2
//	cout << two << endl;
//	string three(one);					// ctor #3
//	cout << three << endl;
//	one += " Oops!";					// overloaded +=
//	cout << one << endl;
//	two = "Sorry! That was ";
//	three[0] = 'P';
//	string four;						// ctor #4
//	four = two + three;					// overloaded +, =
//	cout << four << endl;
//	char alls[] = "All's well that ends well";
//	string five(alls, 20);				// ctor #5
//	cout << five << "!\n";
//	string six(alls + 6, alls + 10);	// ctor #6
//	cout << six << ", ";
//	string seven(&five[6], &five[10]);	// ctor #6 again
//	cout << seven << "...\n";
//	string eight(four, 7, 16);			// ctor #7
//	cout << eight << " in motion!" << endl;
//	return 0;
//}

// strfile.cpp -- read string from a file
//#include <iostream>
//#include <fstream>
//#include <string>
//#include <cstdlib>
//
//int main()
//{
//	using namespace std;
//	ifstream fin;
//	fin.open("tobuy.txt");
//	if (fin.is_open() == false)
//	{
//		cerr << "Can't open file. Bye.\n";
//		exit(EXIT_FAILURE);
//	}
//	string item;
//	int count = 0;
//	getline(fin, item, ':');
//	while (fin)	// while input is good
//	{
//		++count;
//		cout << count << ": " << item << endl;
//		getline(fin, item, ':');
//	}
//	cout << "Done\n";
//	fin.close();
//	return 0;
//}